Systems and methods for car shopping using messaging framework

ABSTRACT

Disclosed embodiments provide devices, methods, and computer-readable storage media for determining information of an object from a captured image. Further, the disclosed device responds to a user input by capturing, with the camera, image data representing an object. The device then transmits, via a messaging application through a network interface to a server, the image data and a request for information relating to the object. The object information is received via the messaging application through the network from the server and is displayed on the display screen.

TECHNICAL FIELD

The present disclosure generally relates to accessing object informationusing mobile devices. More specifically, this disclosure relates todevices and methods for identifying objects from captured images andvideos communicated through inbuilt communication services and fordetermining the information about the identified object.

BACKGROUND

Shopping for a certain kind of object requires knowing the identity ofthe object and location to purchase the identified object. Suchidentification, while currently possible through various search engines,often requires installation of a specialized application, in addition tothe search engine itself, to purchase the identified object. Moreover,while generic search engines are good at providing information about anobject, they lack inbuilt shopping functionality, that is, the abilityto engage in e-commerce without installation of additional software.Although some online shopping services provide search capability, suchcapability is limited to their own inventory. Also, the amount ofinformation relevant to the object that is made available to the user isoften limited. In view of these and other shortcomings and problems withexisting technology, improved systems and methods for identifyingobjects and accessing their information is desired.

SUMMARY

Disclosed embodiments provide devices and methods for determining objectinformation from a captured image.

Consistent with embodiments, a mobile device for determining objectinformation is provided. The device may include at least one memorydevice storing operating system with a built-in messaging application.The device may include a camera. The device may also include a networkinterface. The device may also include a display screen. The device alsoincludes at least one processor executing instructions to performoperations.

The operations may include responding to a user input by capturing, withthe camera, image data representing an object. The operations may alsoinclude transmitting, via the messaging application through the networkinterface to a server, the image data and a request for informationrelating to the object. Requesting information relating to the objectfrom the server may include generating temporary images based on thecaptured image; comparing the temporary images to a plurality ofreference images; assigning scores to the reference images, based onsimilarity to the test images; aggregating scores assigned to thereferences images by the test images; identifying a reference image witha highest aggregated score as the identity of the object; anddetermining information related to the object based on the identity ofthe object. The operations may further include receiving the objectinformation via the messaging application through the network interfacefrom the server. The operations may also include displaying the objectinformation on the display screen.

Consistent with embodiments, non-transitory computer-readable storagemedia may store instructions that are executable by at least oneprocessor of mobile device to perform methods disclosed herein. A methodmay include responding to a user input by capturing, with the camera,image data representing an object. The method may also includetransmitting, via the messaging application through the networkinterface to a server, the image data and a request for informationrelating to the object. Requesting information relating to the objectfrom the server may include generating temporary images based on thecaptured image; comparing the temporary images to a plurality ofreference images; assigning scores to the reference images, based onsimilarity to the test images; aggregating scores assigned to thereferences images by the test images; identifying a reference image witha highest aggregated score as the identity of the object; anddetermining information related to the object based on the identity ofthe object. The method may further include receiving the objectinformation via the messaging application through the network interfacefrom the server. The method may also include displaying the objectinformation on the display screen.

Consistent with the embodiments, methods for determining objectinformation are provided. A method may include responding to a userinput by capturing, with the camera, image data representing an object.The method may also include transmitting, via the messaging applicationthrough the network interface to a server, the image data and a requestfor information relating to the object. Requesting information relatingto the object from the server may include generating temporary imagesbased on the captured image; comparing the temporary images to aplurality of reference images; assigning scores to the reference images,based on similarity to the test images; aggregating scores assigned tothe references images by the test images; identifying a reference imagewith a highest aggregated score as the identity of the object; anddetermining information related to the object based on the identity ofthe object. The method may further include receiving the objectinformation via the messaging application through the network interfacefrom the server. The method may also include displaying the objectinformation on the display screen.

BRIEF DESCRIPTION OF THE DRAWINGS

The accompanying drawings, which are incorporated in and constitute apart of this specification, illustrate several examples, and, togetherwith the description, serve to explain the disclosed principles, In thedrawings:

FIG. 1 is a schematic diagram illustrating an exemplary systemenvironment used to determine information about objects, consistent withdisclosed embodiments;

FIG. 2 is a component diagram of an exemplary user device, consistentwith the present disclosure;

FIG. 3 is a component diagram of an exemplary object identificationservice provider consistent with the present disclosure;

FIG. 4 is a flowchart of an exemplary method for providing informationof objects, consistent with the present disclosure;

FIGS. 5A and 5B are diagrams showing exemplary post determinationmessage of object information from a captured image, displayed on a userdevice of a user, consistent with the present disclosure; and

FIG. 5C is a diagram showing an exemplary post determination message ofobject information from a captured video, displayed on a user device ofa user, consistent with the present disclosure.

DETAILED DESCRIPTION

Reference will now be made in detail to exemplary embodiments, examplesof which are illustrated in the accompanying drawings and disclosedherein. Wherever convenient, the same reference numbers will be usedthroughout the drawings to refer to the same or like parts. For ease ofdiscussion, the present disclosure may describe embodiments in thecontext of online shopping, such as shopping for a car. It is to beunderstood, however, that disclosed embodiments are not limited toonline shopping applications. Rather, the disclosed devices and methodsare applicable to object identification and determination of informationfrom a captured image or video for many other purposes and, in fact, arenot limited to any particular industry or field.

FIG. 1 is a schematic diagram of an exemplary system environment thatmay be configured to provide information about an object in an image,consistent with disclosed examples. The components and arrangementsshown in FIG. 1 are not intended to limit the disclosed examples, as thecomponents used to implement the disclosed processes and features mayvary.

In accordance with the disclosed embodiments, an object identificationsystem 100 may include an object identification service provider 110, auser device 120, a network 130, a server cluster 140, a cloud service150, and a third-party server. Object identification service provider110 operates at least one server 111. Server 111 may be a computer-basedsystem including computer system components, desktop computers,workstations, tables, handheld computing devices, memory devices, and/orinternal network(s) connecting the components. Server 111 is discussedin additional detail with respect to FIG. 3, below.

User device 120 may be a tablet, smart phone, multifunctional watch, orany suitable device with computing and text message service capabilitywhich enable user device 120 to communicate with server 111 through anetwork 130. User device 120 is discussed in additional detail withrespect to FIG. 2 below.

Components of system 100 may communicate via network 130 which, in someembodiments, may comprise one or more interconnected wired or wirelessdata networks that exchange data between devices such as user device120, server 111 of object identification service provider 110, servercluster 140, and/or cloud service 150. Network 130 may be may be asecured or unsecured network and may be implemented as, for example, theinternet, a wired Wide Area Network (WA), a wired Local Area Network(LAN), a wireless LAN (e.g., IEEE 802.11, Bluetooth, etc.), a wirelessWAN (e.g., WiMAX), or the like. Each component in system 100 maycommunicate bi-directionally with other components of system 100 eitherthrough network 130 or through one or more direct communication links(not shown).

Third-party server 160 is associated with a third party and maycommunicate with object identification service provider 110. The thirdparty may be, for example, a car dealership, a car manufacturer, acompany or other suitable data source managing data related to cars.Third-party server 160 may provide information to object identificationservice provider 110. For example, in some embodiments, third-partyserver 160 may provide images and videos of a car identified by objectidentification service provider 110. In some embodiments, third-partyserver 160 may provide location data specifying a car dealership wherean identified model and make car is available.

Cloud service 150 may include a physical and/or virtual storage systemassociated with cloud storage for storing data and providing access todata via a public network such as the Internet. Cloud service 150 mayinclude cloud services such as those offered by, for example, Amazon,Cisco, IBM, Google, Microsoft, Rackspace, or other entities.

In some embodiments, cloud service 150 comprises multiple computersystems spanning multiple locations and having multiple databases ormultiple geographic locations associated with a single or multiple cloudstorage service(s). As used herein, cloud service 150 refers to aphysical and virtual infrastructure associated with a single cloudstorage service. In some embodiments, cloud service 150 manages and/orstores data associated with mass execution of analytical models usingscale-out computing to predict optimal decisions.

Other components known to one of ordinary skill in the art may beincluded in object identification system 100 to process, transmit,provide and receive information consistent with the disclosed examples.In addition, although not shown in FIG. 1, components of system 100 maycommunicate each other through direct communications, rather thanthrough network 130.

FIG. 2 is a diagram of an exemplary user device 120, configured toperform functions of the disclosed methods, consistent with the presentdisclosure. User device 120 may be a mobile device with computingcapabilities, such as a tablet, a smartphone, or any combination ofthese devices and/or affiliated components. As shown, user device 120may include a camera 210, one or more processors 220, a display screen230, a network interface 240, and one or more memory devices 250 storingone or more operating systems 260, including an inbuilt messagingapplication 261. Camera 210 is used to generate a user-provided image ofan object to be identified, which is transmitted by messagingapplication 261 for identification, as described below.

Display screen 230 may include, for example, a liquid crystal display(LCD), a light emitting diode screen (LED), an organic light emittingdiode screens (OLED), a touch screen, or other known display screens.Display screen 230 may display various kinds of information, to bedescribed below.

Network interface 240 allows user device 120 to send and receiveinformation through network 130. Alternatively, or in addition, networkinterface 240 may establish direct wired or wireless connection betweenuser device 120 and other system components, such as server 111 (FIG.1).

Memory 250 may be, for example, a magnetic, semiconductor, tape,optical, removable, non-removable, or other type of storage device ortangible (i.e., non-transitory) computer-readable medium. Memory 250 maystore operating system 260, as well as data and mobile applications forperforming operations consistent with functions described below.

Operating system 260 may perform known operating system functions whenexecuted by processor 220. By way of example, the operating system mayinclude Android™ Apple OS X™, Unix™, Linux™, or others. Accordingly,examples of the disclosed invention may operate and function withcomputer systems running any type of operating system having an inbuiltmessaging application. Messaging application 261, when executed byprocessor 250, provides text messaging communication via network 130(FIG. 1).

FIG. 3 is a diagram of an exemplary object identification serviceprovider 110, configured to perform functions of the disclosed methods,consistent with the present disclosure. As shown in FIG. 3, objectidentification service provider 110 may include at least one server 111,one or more memory devices 310, one or more programs 311, an imagemanipulation module 312, an aggregation module 314, a scoring module313, one or more processors 320, and a network interface 330.

Server 111 may be a single server or may be configured as a distributedcomputer system including multiple servers or computers (e.g., serverclusters 150 and/or cloud service 160) that interoperate to perform oneor more of the processes and functionalities associated with thedisclosed embodiments.

Processor 320 may be one or more known or custom processing devicesdesigned to perform functions of the disclosed methods, such as a singlecore or multiple core processors capable of executing parallel processessimultaneously. For example, processor 320 may be configured withvirtual processing technologies. In certain embodiments, processor 320may use logical processors to simultaneously execute and controlmultiple processors. Processor 320 may be implement virtual machine, orother known technologies to provide the ability to execute, control,run, manipulate, store, etc. multiple software processes, applications,programs, etc. In another embodiment, processor 320 may includemultiple-core processor arrangement (e.g., dual core, quad core, etc.)configured to provide parallel processing functionalities to allowobject identification service provider 110 to execute multiple processessimultaneously. One of ordinary skill in the art would understand thatother types of processor arrangements could be implemented that providefor the capabilities disclosed herein.

Network interface 330 may be implemented as one or more devices forreceiving signals or input from devices and providing signals or outputto one or more devices that allow data to be received and/or transmittedby object identification service provider 110.

Memory 310 may include one or more memory devices that store data andinstructions used to perform one or more features of the disclosedembodiments. For example, memory 310 may represent a tangible andnon-transitory computer-readable medium having stored therein computerprograms, sets of instructions, code, or data to be executed byprocessor 320. Memory 310 may include, for example, a removable memorychip (e.g., EPROM, RAM, ROM, DRAM, EE PROM, flash memory devices, orother volatile or non-volatile memory devices) or other removablestorage units that allow instructions and data to be accessed byprocessor 320.

Memory 310 may also include instructions that, when executed byprocessor 320, perform operations consistent with the functionalitiesdisclosed herein. Methods, systems, and devices consistent withdisclosed embodiments are not limited to separate programs or computersconfigured to perform dedicated tasks. For example, memory 310 mayinclude one or more programs 311 to perform one or more functions of thedisclosed embodiments. Moreover, processor 320 may execute one or moreprograms located remotely from system 100. For example, objectidentification service provider 110 may access one or more remoteprograms, that, when executed, perform functions related to disclosedembodiments.

Memory 310 may also include any combination of one or more relationaland/or non-relational databases 315 such as document management systems,Microsoft SQL databases, SharePoint databases, Oracle databases otherrelational databases, or non-relational databases such as Apache HBase.In some embodiments, memory 310 may comprise an associative arrayarchitecture, such as a key-value storage, for storing and rapidlyretrieving large amounts of information.

Object identification service provider 110 may also be communicativelyconnected to one or more remote memory devices (e.g., remote databases(not shown)) through network 130 or a different network. The remotememory devices may be configured to store information (e.g., structured,semi-structured, and/or unstructured data) and may be accessed and/ormanaged by object identification service provider 110. By way ofexample, the remote memory devices may be document management systems,Microsoft SQL databases, SharePoint databases, Oracle databases, orother relational databases. Systems and methods consistent withdisclosed embodiments however are not limited to separate databases oreven to the use of a database.

Programs 311 stored in memory 310 and executed by processor(s) 320 mayinclude one or more image manipulation module(s) 312, scoring module(s)313, and object identification module(s) 314. Programs 311 may be storedin an internal memory or external storage (not shown) in directcommunication with object identification service provider 110, such asone or more database or memory accessible over network 130. The internaldatabase and external storage may be a volatile or non-volatile, orother type of storage device or non-transitory computer-readable medium.

Image manipulation module 312 pre-processes and modifies the image togenerate multiple images using various features to assist the operationof scoring module 313. Modification features include cropping an image,flipping an image along x-axis and y-axis, skewing an image horizontallyand vertically, and changing color characteristics of the image bymanipulating the histogram.

Consistent with disclosed embodiments, object identification systemprovider 110 may execute one or more scoring modules, including but notlimited to scoring module 313. The purpose of scoring module 313 is tocompare the temporary images, that are, internally generated by imagemanipulation module 312 (from the user-provided image) to externalimages of known objects obtained from a database containing referenceimages, and to assign scores to the comparison results based onsimilarity. The scoring model used in scoring module 313 may be ananalytical model applying, for example, linear regression algorithms,boosted tree algorithms, and/or convolution neural networks. Scoringmodule 313 may leverage structured data (e.g., text data received fromuser device 120, data received from dealer website via an API, etc.) orunstructured data (e.g., images or videos of an object to be identified)to produce scores indicating the matching level associated. In oneexample, when an image of a car is transmitted by user device 120,externally obtained images of various car models and makes are assignedscores by scoring module 313. The scores may be based on thesimilarities of the externally obtained images of known car models andmakes to the car in the user-provided image. The scores may indicate theconfidence level the object identification service provider 110 has inuniquely identifying the car. The multiple images obtained using imagemanipulation module 312 may result in multiple scores associated witheach model and make.

Aggregate module 314 aggregates the scored entries to uniquely identifythe representation of an object in image data. Aggregation may involveadding scores of a certain identity of object in various images. Theentry with the highest score is regarded the identity of the object.

Database 315 in memory 310 may be used as a temporary or permanentstorage. Images received over network 130 to determine objectinformation may be stored in the database. Database 315 mighttemporarily store images generated by image manipulation module 312.Database 315 may also store reference images accessed by scoring module313 to assign scores to images generated by image manipulation module312.

Descriptions of the disclosed embodiments are not exhaustive and are notlimited to the precise forms or embodiments disclosed. Modifications andadaptions of the embodiments will be apparent from consideration of thespecification and practice of the disclosed embodiments. For example,the described implementations include hardware, firmware, and software,but systems and methods consistent with the present disclosure can beimplemented as hardware alone. Additionally, the disclosed embodimentsare not limited to the examples discussed herein.

FIG. 4 is a flow chart illustrating an exemplary method for objectinformation determination, consistent with the present disclosure. Fordiscussion purposes, the exemplary methods discussed in this disclosure(including the method 400) are described as performed by user device 120and server 111. In some examples, however user device 120 may performone or more disclosed method steps. In some examples, differentcomponents of object identification system 100 (such as objectidentification service provider 110 and third-party service 140) mayperform various steps of the methods in a distributed-computingconfiguration.

In step 411, camera 210 of user device 120 is utilized to capture animage or video of an object whose information needs to be determined.User device 120 may store data representing the image in memory 250.

In step 412, captured image data of the object in step 411 istransmitted to server 111 of object identification service provider 110.The transmission may be initiated in messaging application 231 which ispart of operating system 230 of user device 120. User device 120 usesnetwork interface 220 to transmit the image data through network 130 toserver 111. In some examples, an image captured previously by camera 210of user device 120 might be retrieved from memory 250 beforetransmitting it to server 111.

In step 413, server 111 may receive the image data representing theobject to be identified. The server 111 receives the data at networkinterface 330. The received image data may include, for example, stillimage and/or video data captured by camera 210 of user device 120.

In step 414, server 111 of object identification service provider 110determines if the received image data contains text, still image, orvideo data. If the received data is still image data, at step 415, thereceived image data is manipulated using image manipulation module 312executed by processor 320 of server 111. This manipulation may includecropping the image, flipping the image along x-axis and y-axis, skew theimage horizontally and vertically, change color characteristics of theimage. The image manipulation results in multiple images of the receivedimage data.

If the received data is video data, at step 416 the received data is“chunked,” that is, divided into groups of frames, to extract multipleimages using processor 320. The number of extracted images varies basedon the length of the video among other characteristics of the video.

If the received data is text, a direct search of text is performed toidentify the object with the text as its name.

In step 417, depending upon the type of data received, scoring module313 processes the images obtained from image manipulation module 312 orthe video chunked by frames. Scoring module 313 uses the multiple imagesobtained in step 415 and 416 to generate multiple identities of theobject in the received image data. Scoring module 313 associates scoreswith the possible identities of the images obtained in steps 415 and 416to generate matching identities. Aggregate module 314 then aggregatesscores of the matching identities.

In step 418, any EXIF information available in the image data receivedby server 111 is extracted to identify the location where the image wascaptured.

At step 419, the identity with the highest score is regarded as theidentity of the object in image. Once the identity of the object isdetermined server 111 may submit the identity information of an objectto a third-party server 160 to obtain additional information.Additionally, EXIF information extracted in step 418 may be submitted tothird-party server 160 to determine information about identified object.

At step 420, server 111 of object identification service provider 110transmits, via network interface 330, object information including thedetermined identity of the object and related object information. Theobject information is transmitted via text messaging to user device 120through network 130. In addition to the determined identity, thetransmitted object information may include a physical address of abrick-and-mortar store or a URL of an online website where theidentified object is available for sale.

At step 421, user device 120 receives the transmitted object informationvia messaging application 261 and network interface 240.

At step 422, the received object information is displayed on displayscreen 230 of user device 120.

FIG. 5A shows an exemplary user device 120 interacting with objectidentification service provider 110 to display information, received viamessaging application 261, about an object represented by a previouslycaptured image. As shown in FIG. 5A, a text conversation includes anoutgoing message 511 containing image data 512 representing a car(object) is transmitted over network 130 by messaging application 261.Below that the messaging application 261 displays incoming message 513with identity information and the physical address of a dealership wherethe identified object may be purchased.

FIG. 5B shows another exemplary interaction similar to FIG. 5A. FIG. 5Bdiffers from 5A in that the displayed object information includes URL toa website where the identified object is available for sale or whereproduct reviews may be viewed.

FIG. 5C shows another exemplary interaction similar to FIG. 5A. As shownin FIG. 5C, messaging application 261 displays message 511 containingvideo image data 514.

Computer programs based on the written description and methods of thisspecification are within the skill of a software developer. The variousprograms or program modules can be created using a variety ofprogramming techniques. For example, program sections or program modulescan be designed by means of python, Java, C, C++, assembly language, orany such programming languages. One or more of such software sections ormodules can be integrated into a computer system, non-transitorycomputer readable media, or existing communications software.

Moreover, while illustrative embodiments have been described herein, thescope includes any and all embodiments having equivalent elements,modifications, omissions, combinations (e.g., of aspect across variousembodiments), adaptions or alterations based on the present disclosure.The elements in the claims are to be interpreted broadly based on thelanguage employed in the claims and not limited to examples described inthe present specification or during the prosecution of the application,which examples are to be construed as non-exclusive. Further, the stepsof the disclosed methods can be modified in any manner, including byreordering steps or inserting or deleting steps. It is intended,therefore, that he specification and examples be considered as exemplaryonly, with a true scope and spirit being indicated by the followingclaims and their full scope of equivalents.

What is claimed is:
 1. A mobile device for determining objectinformation, the device comprising: at least one memory device storinginstructions, the instructions comprising an operating system with abuilt-in messaging application; a camera; a network interface; a displayscreen; and at least one processor executing the instructions to performoperations comprising: responding to a user input by capturing, with thecamera, image data representing an object; transmitting, via themessaging application through the network interface to a server, theimage data and a request for information relating to the object, whereinrequesting information relating to the object from the server comprises:generating temporary images based on the captured image; comparing thetemporary images to a plurality of reference images; assigning scores tothe reference images, based on similarity to the test images;aggregating scores assigned to the references images by the test images;identifying a reference image with a highest aggregated score as theidentity of the object; and determining information related to theobject based on the identity of the object. receiving the objectinformation via the messaging application through the network interfacefrom the server; and displaying the object information on the displayscreen.
 2. The device of claim 1, wherein the object informationcomprises an identification of the object.
 3. The device of claim 1,wherein the object information comprises an identification of an entityoffering the identified object for sale.
 4. The device of claim 3,wherein the object information comprises a physical location where theidentified object is sold.
 5. The device of claim 3, wherein the objectinformation comprises an address of a web site offering the object forsale.
 6. The device of claim 1, wherein the camera comprises a videocamera.
 7. The device of claim 6, wherein: responding to the user inputcomprises capturing video data representing the object; and theoperations further comprise extracting the image data of the object fromthe video data.
 8. The device of claim 3, wherein the physical locationis determined based on the location information embedded in the capturedimage data.
 9. The device of claim 2, wherein the object information ofthe identified object further comprises review information of theidentified object.
 10. A non-transitory computer-readable storage mediumstoring instructions that, when executable by at least one processor ofmobile device, cause the mobile device to perform a method fordetermining object information, the method comprising: responding to auser input by capturing, with a camera, image data representing anobject; transmitting via a messaging application through a networkinterface to a server, the image data and a request for informationrelating to the object, wherein requesting information relating to theobject from the server comprises: generating temporary images based onthe captured image; comparing the temporary images to a plurality ofreference images; assigning scores to the reference images based onsimilarity to the test images; aggregating scores assigned to thereferences images by the test images; identifying a reference image witha highest aggregated score as the identity of the object; anddetermining information related to the object based on the identity ofthe object. receiving the object information via the messagingapplication through the network interface from the server; anddisplaying the object information on a display screen.
 11. Thenon-transitory computer-readable medium of claim 10, wherein displayingthe object information comprises displaying an identification of theobject.
 12. The non-transitory computer readable medium of claim 10,wherein displaying the object information comprises displaying anidentification of an entity offering the identified object for sale. 13.The non-transitory computer readable medium of claim 12, whereindisplaying the object information comprises displaying a physicallocation where the identified object is sold.
 14. The non-transitorycomputer readable medium of claim 12, wherein displaying the objectinformation comprises displaying an address of a website where theidentified object is sold.
 15. The non-transitory computer-readablemedium of claim 11, wherein displaying the object information of theidentified object further comprises displaying review information of theidentified object.
 16. A method performed by a mobile device,comprising: responding to a user input by capturing, with a camera,image data representing an object; transmitting via a messageapplication through a network interface to a server, the image data anda request for information relating to the object, wherein requestinginformation relating to the object from the server comprises: generatingtemporary images based on the captured image; comparing the temporaryimages to a plurality of reference images; assigning scores to thereference images based on the similarity to the test images; aggregatingscores assigned to the references images by the test images; identifyinga reference image with a highest aggregated score as the identity of theobject; and determining information related to the object based on theidentity of the object. receiving the object information via themessaging application through the network interface from the server; anddisplaying the object information on the display screen.
 17. The methodof claim 16, wherein displaying the object information on the displayscreen comprises displaying an identification of the object.
 18. Themethod of claim 16, wherein displaying the object on the display screencomprises displaying an identification of an entity offering theidentified object for sale.
 19. The method of claim 18, whereindisplaying the identification of the entity offering the identifiedobject for sale comprises displaying a physical location where theidentified object is sold.
 20. The method of claim 18, whereindisplaying the identification of the entity offering the identifiedobject for sale comprises displaying an address of a website offeringthe object for sale.